home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / etc / gdm / Xsession < prev   
Text File  |  2009-10-20  |  6KB  |  246 lines

  1. #!/bin/sh
  2. #
  3. # This is SORT OF LIKE an X session, but not quite.  You get a command as the
  4. # first argument (it could be multiple words, so run it with "eval").  As a
  5. # special case, the command can be:
  6. #  default - Run the appropriate Xclients startup (see the code below)
  7. #  custom - Run ~/.xsession and if that's not available run 'default'
  8. #
  9. # (Note that other arguments could also follow, but only the command one is
  10. # right now relevant and supported)
  11. #
  12. # The output is ALREADY redirected to .xsession-errors in GDM.  This way
  13. # .xsession-errors actually gets more output such as if the PreSession script
  14. # is failing.  This also prevents DoS attacks if some app in the users session
  15. # can be prodded to dump lots of stuff on the stdout/stderr.  We wish to be
  16. # robust don't we?  In case you wish to use an existing script for other DM's,
  17. # you can just not redirect when GDMSESSION is set.  GDMSESSION will always
  18. # be set from gdm.
  19. #
  20. # Also note that this is not run as a login shell, this is just executed.
  21. # This is why we source the profile files below.
  22. #
  23. # based on:
  24. # $XConsortium: Xsession /main/10 1995/12/18 18:21:28 gildea $
  25.  
  26. command="$@"
  27.  
  28. # this will go into the .xsession-errors along with all other echo's
  29. # good for debugging where things went wrong
  30. echo "$0: Beginning session setup..."
  31.  
  32. # First read /etc/profile and .profile
  33. test -f /etc/profile && . /etc/profile
  34. test -f "$HOME/.profile" && . "$HOME/.profile"
  35. # Second read /etc/xprofile and .xprofile for X specific setup
  36. test -f /etc/xprofile && . /etc/xprofile
  37. test -f "$HOME/.xprofile" && . "$HOME/.xprofile"
  38.  
  39. # Translation stuff
  40. if [ -x "/usr/lib/gdm/gdmtranslate" ] ; then
  41.   gdmtranslate="/usr/lib/gdm/gdmtranslate"
  42. else
  43.   gdmtranslate=
  44. fi
  45.  
  46. # Note that this should only go to zenity dialogs which always expect utf8
  47. gettextfunc () {
  48.   if [ "x$gdmtranslate" != "x" ] ; then
  49.     "$gdmtranslate" --utf8 "$1"
  50.   else
  51.     echo "$1"
  52.   fi
  53. }
  54.  
  55. OLD_IFS=$IFS
  56.  
  57. gdmwhich () {
  58.   COMMAND="$1"
  59.   OUTPUT=
  60.   IFS=:
  61.   for dir in $PATH
  62.   do
  63.     if test -x "$dir/$COMMAND" ; then
  64.       if test "x$OUTPUT" = "x" ; then
  65.         OUTPUT="$dir/$COMMAND"
  66.       fi
  67.     fi
  68.   done
  69.   IFS=$OLD_IFS 
  70.   echo "$OUTPUT"
  71. }
  72.  
  73. zenity=`gdmwhich zenity`
  74.  
  75. # Note: ~/.xsession-errors is now done in the daemon so that it
  76. # works for ALL sessions (except ones named 'Failsafe')
  77.  
  78. # clean up after xbanner
  79. freetemp=`gdmwhich freetemp`
  80. if [ -n "$freetemp" ] ; then
  81.     "$freetemp"
  82. fi
  83.  
  84. userresources="$HOME/.Xresources"
  85. usermodmap="$HOME/.Xmodmap"
  86. userxkbmap="$HOME/.Xkbmap"
  87.  
  88. sysresources=/etc/X11/Xresources 
  89. sysmodmap=/etc/X11/Xmodmap 
  90. sysxkbmap=/etc/X11/Xkbmap
  91.  
  92. rh6sysresources=/etc/X11/xinit/Xresources 
  93. rh6sysmodmap=/etc/X11/xinit/Xmodmap 
  94.  
  95. # merge in defaults
  96. if [ -f "$rh6sysresources" ]; then
  97.     xrdb -nocpp -merge "$rh6sysresources"
  98. fi
  99.  
  100. if [ -f "$sysresources" ]; then
  101.     xrdb -nocpp -merge "$sysresources"
  102. fi
  103.  
  104. if [ -f "$userresources" ]; then
  105.     xrdb -nocpp -merge "$userresources"
  106. fi
  107.  
  108. # merge in keymaps
  109. if [ -f "$sysxkbmap" ]; then
  110.     setxkbmap `cat "$sysxkbmap"`
  111.     XKB_IN_USE=yes
  112. fi
  113.  
  114. if [ -f "$userxkbmap" ]; then
  115.     setxkbmap `cat "$userxkbmap"`
  116.     XKB_IN_USE=yes
  117. fi
  118.  
  119. #
  120. # Eeek, this seems like too much magic here
  121. #
  122. if [ -z "$XKB_IN_USE" -a ! -L /etc/X11/X ]; then
  123.     if grep '^exec.*/Xsun' /etc/X11/X > /dev/null 2>&1 && [ -f /etc/X11/XF86Config ]; then
  124.        xkbsymbols=`sed -n -e 's/^[     ]*XkbSymbols[   ]*"\(.*\)".*$/\1/p' /etc/X11/XF86Config`
  125.        if [ -n "$xkbsymbols" ]; then
  126.            setxkbmap -symbols "$xkbsymbols"
  127.            XKB_IN_USE=yes
  128.        fi
  129.     fi
  130. fi
  131.  
  132. # xkb and xmodmap don't play nice together
  133. if [ -z "$XKB_IN_USE" ]; then
  134.     if [ -f "$rh6sysmodmap" ]; then
  135.        xmodmap "$rh6sysmodmap"
  136.     fi
  137.  
  138.     if [ -f "$sysmodmap" ]; then
  139.        xmodmap "$sysmodmap"
  140.     fi
  141.  
  142.     if [ -f "$usermodmap" ]; then
  143.        xmodmap "$usermodmap"
  144.     fi
  145. fi
  146.  
  147. unset XKB_IN_USE
  148.  
  149. # Normalize languages, some places/distros screw us up in /etc/profile,
  150. # so in case the user did select a language
  151. if [ -n "$GDM_LANG" ]; then
  152.   LANG="$GDM_LANG"
  153.   export LANG
  154.  
  155.   if [ -n "$LC_ALL" ]; then
  156.     if [ "$LC_ALL" != "$LANG" ]; then
  157.       LC_ALL="$LANG"
  158.     fi
  159.   else
  160.     unset LC_ALL
  161.   fi
  162.  
  163.   if [ -n "$LANGUAGE" ]; then
  164.     if [ "$LANGUAGE" != "$LANG" ]; then
  165.       LANGUAGE="$LANG"
  166.     fi
  167.   else
  168.     unset LANGUAGE
  169.   fi
  170.  
  171.   if [ -n "$LINGUAS" ]; then
  172.     if [ "$LINGUAS" != "$LANG" ]; then
  173.       LINGUAS="$LANG"
  174.     fi
  175.   else
  176.     unset LINGUAS
  177.   fi
  178. fi
  179.  
  180. # run all system xinitrc shell scripts.
  181. if [ -d /etc/X11/xinit/xinitrc.d ]; then
  182.     for i in /etc/X11/xinit/xinitrc.d/* ; do
  183.         if [ -x "$i" ]; then
  184.         . "$i"
  185.         fi
  186.     done
  187. fi
  188.  
  189. # run /etc/X11/Xsession.d/
  190. OPTIONFILE=/etc/X11/Xsession.options
  191. if [ -d /etc/X11/Xsession.d ]; then
  192.     for i in `ls /etc/X11/Xsession.d/` ; do
  193.         if [ -r "/etc/X11/Xsession.d/$i" ] && expr "$i" : '^[[:alnum:]_-]\+$' > /dev/null; then
  194.         . "/etc/X11/Xsession.d/$i"
  195.         fi
  196.     done
  197. fi
  198.  
  199. if [ "x$command" = "xcustom" ] ; then
  200.   if [ -x "$HOME/.xsession" ]; then
  201.     command="$HOME/.xsession"
  202.   else
  203.     echo "$0: Cannot find ~/.xsession will try the default session"
  204.     command="default"
  205.   fi
  206. fi
  207.  
  208. if [ "x$command" = "xdefault" ] ; then
  209.   if [ -x "$HOME/.Xclients" ]; then
  210.     command="$HOME/.Xclients"
  211.   elif [ -x /etc/X11/xinit/Xclients ]; then
  212.     command="/etc/X11/xinit/Xclients"
  213.   elif [ -x /etc/X11/Xclients ]; then
  214.     command="/etc/X11/Xclients"
  215.   else
  216.     if [ -n "$zenity" ] ; then
  217.     disptext=`gettextfunc "System has no Xclients file, so starting a failsafe xterm session.  Windows will have focus only if the mouse pointer is above them.  To get out of this mode type 'exit' in the window."`
  218.       "$zenity" --info --text "$disptext"
  219.     else
  220.       echo "$0: Cannot find Xclients"
  221.     fi
  222.     exec xterm -geometry 80x24+0+0
  223.   fi
  224. fi
  225.  
  226. # add ssh-agent if found
  227. sshagent="`gdmwhich ssh-agent`"
  228. if [ -n "$sshagent" ] && [ -x "$sshagent" ] && [ -z "$SSH_AUTH_SOCK" ]; then
  229.     command="$sshagent -- $command"
  230. elif [ -z "$sshagent" ] ; then
  231.     echo "$0: ssh-agent not found!"
  232. fi
  233.  
  234. echo "$0: Setup done, will execute: $command"
  235.  
  236. eval exec $command
  237.  
  238. echo "$0: Executing $command failed, will run xterm"
  239.  
  240. if [ -n "$zenity" ] ; then
  241.     disptext=`gettextfunc "Failed to start the session, so starting a failsafe xterm session.  Windows will have focus only if the mouse pointer is above them.  To get out of this mode type 'exit' in the window."`
  242.     "$zenity" --info --text "$disptext"
  243. fi
  244.  
  245. exec xterm -geometry 80x24+0+0
  246.